"""
@Project:${2108a 人工智能}
@File:factorymodel.py
@Author:周家昌
@Date:14:12
"""

from abc import ABCMeta,abstractmethod

# ABCMeta 抽象基类 只能用于继承 不会创建实际对象
class Animal(metaclass=ABCMeta):
    @abstractmethod # 把被装饰的方法申明为抽象的方法，用于重写和继承
    def do_say(self):
        pass

    @abstractmethod  # 把被装饰的方法申明为抽象的方法，用于重写和继承
    def run(self):
        pass

class Dog(Animal):
    def do_say(self):
        print('汪汪')
    def run(self):
        print('狗')

class Cat(Animal):
    def do_say(self):
        print('喵喵')
    def run(self):
        print('猫')

class FactoryClass(object):
    def make_sound(self,obj_type):
        return eval(obj_type)().do_say()
    def make_run(self,obj_type):
        return eval(obj_type)().run()

f = FactoryClass()
name = input('输入Dog或Cat》》')
f.make_sound(name)  # 对外提供的方法，如何返回结果 不对外公布分开
f.make_run(name)
